           -  ""
                      . 
                           1992

                    

                      "     "

                      (  1.3)


             

     I.3.    - IOSUB


     IOSUB .   -
     .

; IOSUB.ASM               13.02.92
;
;     
;      
;     -, ,
;           
;
; (C)1992  "", ..

 ORG $300-$18 (8*  )

 SBTL '  '

A7 EQU ?7  
A9 EQU ?9

BIT3 EQU $2C   BIT Abs

;   :
KBD     EQU $C000   
KBDSTRB EQU $C010 PL/MI - / KBD
KBDREG  EQU $C063 PL/MI - /LAT
SPEAKR  EQU $C030 
IRPT1   EQU $C040 .
 IF A7
IRPT2   EQU $C050 .
 ELSE A9
IRPT2   EQU $C020
 ENDIF
BTNREG  EQU $C061 +0/1  
PDLREG  EQU $C064 +0/1  
PDLTRIG EQU $C070       
DISPLAY EQU $C700 +XX    

;   : STA CX00+
 IF A7
DBLB  EQU 0
OZU1  EQU 8  .O
OZU2  EQU 9
PZU1  EQU $A0  
PZU2  EQU $A1
PZUWR EQU $20 EOR PZU: 
DBANK EQU $40
 ELSE A9
DBLB  EQU $80       
OZU1  EQU $44 ,55 . .O
OZU2  EQU $4C ,5D
PZU1  EQU $66 ,77 . 
PZU2  EQU $6E ,7F
 ENDIF

;    . (INVFLG):
REDCLR EQU 1
GRNCLR EQU 2
YELCLR EQU 3
BLUCLR EQU 4
VIOCLR EQU 5
NAVCLR EQU 6
WHTCLR EQU 7
NORMLB EQU $28
INVERB EQU $00
FLASHB EQU $08

; .,   IOSUB
;   -:
; - :
NORMSYM EQU $81 ^A/0   
INVSYM  EQU $82 ^B/. 
FLSHSYM EQU $83 ^C/= 
BELLSYM EQU $87 ^G    
LEFTSYM EQU $88 ^H/<-  
HOMESYM EQU $8B ^K       
CLSSYM  EQU $8C ^L     
RETSYM  EQU $8D ^M/C  
CLINSYM EQU $8F ^O     .
REDSYM  EQU $90 ^P/1    
GRNSYM  EQU $91 ^Q/2  
YELSYM  EQU $92 ^R/3  
BLUSYM  EQU $93 ^S/4  
VIOSYM  EQU $94 ^T/5  
RGHTSYM EQU $95 ^U/->  
SCUPSYM EQU $96 ^V       
SCDNSYM EQU $97 ^W       
UPSYM   EQU $99 ^Y/    
DOWNSYM EQU $9A ^Z/    
NAVSYM  EQU $9C ^\/6   
WHTSYM  EQU $9D ^]/7   
EOLSYM  EQU $9E ^^/8 . 
EOPSYM  EQU $9F ^_/9 . 
;
; -   (ALTSYM+..):
CAPSSYM EQU $84 ^D/F1  .
ALTSYM  EQU $85 ^E/F2 /.
;       ALT $81 ^A/0 .  
;       ALT $82 ^B/. .  
;       ALT $83 ^C/= /. .
;       ALT $84 ^D/F1  /
;       ALT $85 ^E/F2  .
;       ALT $86 ^F/F3  /.
;
; :
SCRSYM   EQU $86 F3 .  
;LEFTSYM EQU $88 ^H  .
;RETSYM  EQU $8D ^M  
DELSYM   EQU $90 ^P   
INSSYM   EQU $91 ^R   /
;RGHTSYM EQU $95 ^U  .
CTRLSYM  EQU $96 ^V  -
BEGSYM   EQU UPSYM    
ENDSYM   EQU DOWNSYM   
ESCSYM   EQU $9B ^[  
;EOLSYM  EQU $9E ^^   


 SBTL '   0 '
;   :
STDSCRN EQU $800 -FFF .
INVFLG  EQU $32 . 
TXPAGE  EQU $33 .. 
; 
WNDLFT  EQU $20    
WNDWDTH EQU $21   
WNDTOP  EQU $22 .
WNDBTM  EQU $23 .+1
CH      EQU $24 X-.   ()
CV      EQU $25 Y-.   ()
BASLIN  EQU $28 -29  .

;   :
GRPAGE  EQU $38 ...
GRMODE  EQU $39 . (.)

; 
RND EQU $34 -35   
STINBUF EQU $200  IOSUB - . 
;  26-27,2A-31,36-37 -   I/O,

 SBTL '  '

IOSUB::

*--   
;   /: A= 
;
CALLPRINT::
 JSR MEMCALL    
 DFB OZU1!DBLB  
 JSR LP     <-  
LP RTS          JMP!
 

*--    
;    -  COMMAND.DEF
;
CMDHAND EQU $FFF4

CALLCMD::
 JSR MEMCALL     
 DFB PZU1!DBLB 
 JSR CMDHAND    JMP!
 RTS


*--    
;     . -  DOS.DEF
;
DOS EQU $AB60

CALLDOS::
 JSR MEMCALL      
 DFB OZU1!DBLB
 JSR DOS        JMP!
 RTS


*--   IOSUB:
;   [7]=0/1: A7/9; [6]=0/1: / /.
;
VERSION::
  IF A7
 DFB $03
  ELSE A9
 DFB $03!$80
  ENDIF


 SBTL ' '

*--    IRQ:
;
IRQHAND::
 STA ACC
 PLA
 PHA
 AND #:00010000
 CMP #:00010000
ACC EQU *+1
 LDA #0
 BCC IRQVECT

*--  :
;
BRKVECT:: JMP RTI     BRK-
RSTVECT:: JMP RESTART 
IRQVECT:: JMP RTI     IRQ
NMIVECT:: JMP RTI     NMI


*-- /.  IRQ/NMI:
;
IRPTON::
 STA IRPT1   -7 - :
 RTS        - 

IRPTOFF::
 STA IRPT2
 RTS


 SBTL '  A7-'
* 7:   O   
*  RAMSTAT+2,ROMSTAT+2,SETRAM+2,SETROM+2/-2
*  

*--   7-
;   : X = N  ( 9  )
;   : A =     (7/9-),
;        X,Y .
;
RAMSTAT::
  IF A7
 LDA $C100,X 7-:CX00
  ELSE
 LDA $C140   9-:4 
  ENDIF
 RTS

ROMSTAT:
  IF A7
 LDA $C100,X 7-:CX00
  ELSE
 LDA $C160   9-:6 
  ENDIF
 RTS


*--   :
;   :  (ROM)C=0/1 - D0/D1
;   : X =  , A,X,Y .
;
;   7-:
RAM1::
 LDX #OZU1
  DFB BIT3
RAM2::
 LDX #OZU2

  IF A7
 BIT NOP1 3  NOP
  ELSE A9
SETB2 STA $C111,X  9-
  ENDIF

; -:
SETRAM::
 STA $C100,X A7:CX00
 RTS

;   7-:
ROM1::
 LDX #PZU1 .7-
  DFB BIT3
ROM2::
 LDX #PZU2

  IF A7
 BCC SETROM
 STA $C100+DBANK,X A7:CX00
 RTS

; -:   7!
SETROM::
 STA $C100,X A7:CX00
 RTS

  ELSE A9
 STA $C083    D0/D1
 BCC SETB2
 STA $C08B
 BCS SETB2 /J
  ENDIF


*--     :
;    JSR MEMCALL
;    DFB <  >
;    <3 :   >
;     (  - JSR)
;       - !
;     
;
MEMCALL::
 JMP MEMCALL1


 SBTL '   I/O'

CNLSTAT:: DFB :11010000  I/O:PQRSTUVW

*--    :
;
CNL.P:: DS 2*3+2 <-  :
CNL.Q:: DS 2*3+2     
CNL.R:: DS 1*3
CNL.S:: DS 3*3+1
CNL.T:: DS 1*3
CNL.U:: DS 1*3
CNL.V:: DS 1*3
CNL.W:: DS 1*3


*--      :
;   :  (O:A-),
;        INX,OUTX: X -   (P-W:10-17),
;        IN,OUT:  -  
;   : (I:A-)
;
CNLOUTX::
 PHA
 LDA CNLS-$10,X
 STA CNLOUT+1
 PLA
CNLOUT::
 JMP CNL.S <--  

CNLINX::
 PHA
 LDA CNLS-$10,X
 STA CNLIN+1
 PLA
CNLIN::
 JMP CNL.S <--  

CNLS DFB CNL.P,CNL.Q,CNL.R,CNL.S
     DFB CNL.T,CNL.U,CNL.V,CNL.W


 SBTL '  '
*   CONIN  CONOUT 
*      

GLINE
 TXA     .  
 PHA
 TYA
 PHA
 JSR GETLNST
 LDA #>STINBUF
 STA CONIN+1
 PLA
 TAY
 PLA
 TAX

CONIN::
 LDA STINBUF+00 <-- .-  
 INC CONIN+1
 CMP #RETSYM
 BEQ GLINE
 RTS


;CONOUT:: EQU SCROUT


 SBTL '    '

*--   (->)  :
;   X,Y 
;
RDKEY0::
 LDA #0       
  DFB BIT3   
RDKEY_::
 LDA #'_'     - 
RDKEYA::
 STA CURSOR     A
KEYIN::
 JMP KBDIN     

CURSOR::
 DFB '_'  


*--   ( 255 )
;   : AX =   (=STINBUF)
;       Y = m. 
;       C = 0/1: /. .
;  : Y = - C  
;
GETLNST::
 CLC
 LDA #<STINBUF . 
 LDX #>STINBUF
 LDY #>IOSUB-STINBUF
GETLINE::
 JSR MEMCALL
 DFB PZU1!DBLB
 JSR GETLNST1 <-  
 RTS

*--  .  :
;   /: A-.
;
GLNFILT::
 JMP NOP1

GLNFLG:: DFB 0  . 


 SBTL '    '
*  : A= 
*    X,Y

*--  HEX-/ A:
;
BYTEOUT::
 PHA
 LSR A
 LSR A
 LSR A
 LSR A
 JSR PRH
 PLA
DIGOUT::
 AND #$0F
PRH ORA #'0'
 CMP #'9'+1
 BCC CHAROUT
 ADC #6 (7)


*-- .  :
;
CHAROUT::
 JMP SCROUT <-- 


*--  :  C  .-
;
CROUT1::
 JSR CLREOL    
CROUT::
 LDA #RETSYM 
 BNE CHAROUT /J


 SBTL ' '

*-- . : 13+27/2*A+512*A*A :
;   : A=0, X,Y .
;
WAIT::
 SEC
WT2 PHA
WT3 SBC #1
 BNE WT3
 PLA
 SBC #1
 BNE WT2
 RTS


*--  :
;
RESTART::
  IF A7
 LDX #PZU1%PZUWR
 JSR SETROM
  ELSE A9
 STA $C081 mnitr
 NOP
 NOP
  ENDIF
 JMP ($FFFC)  .


 SBTL '   '

*--    .:
;
SETSCRN::
 LDA #$80!NORMLB!GRNCLR   & 64
 STA INVFLG
 LDA #<STDSCRN 
 STA TXPAGE
 JSR SETWIND  


*--    :
;
SHOWTX::
 LDY #0
 BIT INVFLG
 BPL ST
 INY
ST LDA TXPAGE
 CLC
 BCC SHOWSCRN /J


*--  ..:
;
GR.TXT EQU *+1  MI/PL: /

GR.TEXT::
 LDA #0     <-- 
 BMI SHOWTX


*--     .
;  : GRPAGE/A=, GRMODE/Y=
; : Y=   .
;
SHOWGR::
 LDA GRPAGE
 LDY GRMODE
 SEC
SHOWSCRN::
 ROR GR.TXT
 LSR A
 ADC TDISP,Y C=0
 TAY
 LDA DISPLAY,Y
 RTS

TDISP
   IF A7
 DFB 2,$82,1,3,0
 DFB 0  .
   ELSE A9
 DFB 2,$82,1,3,0,$83
   ENDIF


 SBTL '   '
*  .   .
*     A;  .X,Y
 
YSAV EQU $2A  

*--      :
;   : A=. (A[7]=1)
;
KINKEY::
 LDA CURSOR   ?
 BEQ KINSTRB

;    CURSOR  :
;
KINCURS::
 TYA
 PHA
 JSR CALCH
 LDA (BASLIN),Y
 PHA
 EOR CURSOR
 PHA
KW0 PLA
 PHA
 EOR (BASLIN),Y
 STA (BASLIN),Y
KW1 INC RND
 BNE KW2
 INC RND+1
 LDA RND+1
 AND #$3F
 BEQ KW0
KW2 LDA KBD
 BPL KW1
 PLA 
 PLA
 STA (BASLIN),Y
 PLA
 TAY


*--   :
;   : A= 
;
KINSTRB::
 LDA KBD
 BPL KINSTRB
 LDA #$10   
 JSR WAIT  ( < V)


*--   :
;   : N,A= 0,? / 1, 
;
KBDSTAT:: LDA KBD
 BPL KBDR


*--   :
;
KBDRST::
 BIT KBDSTRB
KBDR RTS


*--     
;     :
;   : A= 
;
KBDIN::
 JSR KBDRST   
KBDIN1::    ;
 JSR KINKEY


*--      :
;    - -  KBDMFLG,CAPSFLG,GRPHFLG
;    -   .
;  : A=  ([7]=1,[6]=), KBDREG[7]-
; : A= 
;
KEYFUNC::
 CMP #CAPSSYM ..?
 BEQ SETCAPS
 CMP #ALTSYM .?
 BNE KEYCODE
 JSR KINKEY
 CMP #$C0
 BCC SETMODE
 AND #$3F ->.
;.. RTS

*--      
;     :
;       
;  : A=  ([7]=1,[6]=), KBDREG[7]-
; : A= 
;
KEYCODE::
 CMP #$C0
 BCC KC3
 CMP #$E0
 BCC KC1
 EOR KBDMFLG
KC1 BIT KBDREG
 BMI KC2
 EOR #$A0  +
KC2 EOR CAPSFLG
 AND GRPHFLG
KC3 RTS

 NOP ***

SETCAPS LDA #$80 - 
SETMODE CMP #$86 ( 80-86)
 BCS KFR
 STY YSAV
 TAY
 LDA TOGGL-$80,Y
 EOR FLAGS-$80,Y
 STA FLAGS-$80,Y
 LDY YSAV
 LDA #CAPSSYM -.
KFR RTS

TOGGL DFB $80,$80,$04,$20,$A0,$C0 

FLAGS
CAPSFLG:: DFB $00 /80  .
FONTFLG:: DFB $00 /80  
COLRFLG:: DFB $00 /04  CTRL-
CTRLFLG:: DFB $A0 /80  CTRL-
KBDMFLG:: DFB $A0 /00  /
GRPHFLG:: DFB $FF /3F .


 SBTL '   '

BAS2L EQU $2A -2B   
YSAV1 EQU $2C - SCROUT
INCR  EQU $2D - SCROLL
LIM   EQU $2E - SCROLL

*--    
;   : A = 
;   : A,X,Y , PSW   A
;
CONOUT::
SCROUT::
 PHA
 STY YSAV1
 JSR CTRLOUT
 LDY YSAV1
 PLA
 RTS


*--  .   
;
CTRLOUT TAY
 BPL STORADV
 CMP #' '
 BCS STORADV
 LDY #<ADVANCE
 STY BAS2L+1
 LDY #SYMCTRL-TABCTRL
 JMP CALLTAB


*--       
;   : /CH =    
;   : Y =  .BASLIN  
;
CALCH::
 LDA CH
CALCHZ::
 BIT INVFLG
 BMI SC
 ASL A
SC TAY
 RTS


*--    .  
;   /: A = 
;
STORSCR::
 PHA
 JSR CALCH
 PLA
 SEC
 BPL ST1
 CMP CTRLFLG
 BCS ST1
 EOR #$40
ST1 BIT INVFLG
 BMI ST4
 JSR ST4
 BCC ST3
 ASL A
 LDA INVFLG
 BCS ST2
 EOR COLRFLG
ST2 DFB BIT3
ST3 LDA #INVERB+YELCLR
 INY
ST4 PHA
 ORA FONTFLG
 STA (BASLIN),Y
 PLA
 RTS


*--      .
;   , ,  
;   : A=
;
STORADV::
 JSR STORSCR

*--   . ( ( ))
;
ADVANCE::
 JSR RIGHT
 BCC NOP1

*--     
;
NEWLINE::
 JSR KBDSTAT
 CMP #' '
 BNE NL
 JSR KINSTRB
NL JSR DOWN
 BCC CR
 JSR SCROLL

*--    
;
CR::
 LDA #0
 STA CH
;.. RTS


*-- -    
;   : C=1:   , X,Y .
;
LEFT::
 LDA #0
 CMP CH
 BCC DECCH
 RTS

RIGHT::
 INC CH
 LDA CH
 CMP WNDWDTH
 BCC NOP1
EDGE LDA WNDWDTH
 STA CH
DECCH DEC CH
NOP1 RTS

DOWN::
 INC CV
 LDA CV
 CMP WNDBTM
 BCC VTAB
 DEC CV
 RTS

UP::
 LDA WNDTOP
 CMP CV
 BCS NOP1
 DEC CV
 BCC VTAB /J


*--   .  ()
;
BS::
 JSR LEFT
 BCC BS1
 JSR UP
 BCC EDGE
BS1 RTS


*-- : 0.1 , 1
;   : A=?, X , Y=0
;
BELL::
 LDA #$40
 JSR WAIT
 LDY #$C0
BL LDA #12
 JSR WAIT
 LDA SPEAKR
 DEY
 BNE BL
 RTS

RTI EQU BELL+1  RTI


*--  
;   : INVFLG=, X .
;
SETINV::
 LDA #INVERB
  DFB BIT3
SETFLSH::
 LDA #FLASHB
  DFB BIT3
SETNORM::
 LDA #NORMLB
 EOR INVFLG
 AND #$78
 JMP STFL


*--  .
;   : X,Y .;   .
;
SETWIND::
 LDA #$20
 STA WNDBTM 
 BIT INVFLG
 BPL SW
 ASL A
SW STA WNDWDTH
 LDA #0
 STA WNDTOP
 STA WNDLFT 

*--  -   
;
HOME::
 JSR CR
 LDA WNDTOP


*--    
;   : A =   (VTAB: CV)
;   : BASLIN = , C=0, X,Y .
;
TABV::
 STA CV  .
VTAB::
 LDA CV 
VTABZ::
 JSR BASCALC 
 LDA BASLIN
 ADC WNDLFT C=0
 STA BASLIN
 RTS


*--     .
;   : CH,CV,X .
;
CLS::
 JSR HOME

CLREOP::
 LDA WNDBTM
CLEOPZ SEC
 SBC #1
 PHA
 JSR VTABZ
 PLA
 CMP CV
 BEQ CLREOL
 PHA
 JSR CLRLINE
 PLA
 BNE CLEOPZ /J


*--  . /    CH
;   : X,CH . C=0
;
CLRLINE::
 LDY #0
 TYA 
 BEQ CLEOLZ /J

CLREOL::
 JSR CALCH
 LDA CH
CLEOLZ SEC
 SBC WNDWDTH =>C=0
 STX BAS2L
 TAX
CLRC LDA #' '
 STA (BASLIN),Y 
 INY          
 LDA INVFLG
 BMI CLZ
 STA (BASLIN),Y
 INY
CLZ INX
 BNE CLRC
 LDX BAS2L
 BCC VTAB /J - BASLIN .


*--   (srll)
;   : .X, CH,CV
;
SCRLDN::
 LDY WNDBTM   CV
 DEY
 TYA  - .
 LDY CV - .
 DEY
 STY LIM
 LDY #$FF - 
 BNE SCOMN /J

SCROLL::
 LDA WNDTOP   .
  DFB BIT3
SCRLUP::
 LDA CV   CV
 LDY WNDBTM - .
 STY LIM
 LDY #1 - 

SCOMN STY INCR
 PHA
 JSR VTABZ ->C=0
SCRL1 LDA BASLIN
 STA BAS2L
 LDA BASLIN+1
 STA BAS2L+1
 LDA WNDWDTH
 JSR CALCHZ
 PLA
 ADC INCR C=0
 CMP LIM
 BEQ CLRLINE  
 PHA
 JSR VTABZ
SCRL2 DEY
 BMI SCRL1
 LDA (BASLIN),Y
 STA (BAS2L),Y
 BCC SCRL2 /J


*--   INVFLG:
;   : Y[2:0] -  
SETCOLOR::
 TYA
 EOR INVFLG
 AND #7
STFL EOR INVFLG
 STA INVFLG
 RTS


*--  .
;   : A-
;
CALLTAB:
 CMP TABCTRL,Y
 BEQ CALL
 INY
 BCS CALLTAB  <
 LDY #7
CCOL CMP TCOLORS-1,Y   
 BEQ SETCOLOR
 DEY
 BNE CCOL
 RTS
CALL LDA ADRCTRL,Y
 STA BAS2L
 JMP (BAS2L)

TCOLORS
 DFB REDSYM,GRNSYM,YELSYM
 DFB BLUSYM,VIOSYM,NAVSYM
 DFB WHTSYM

;   ( ):
TABCTRL:
GETCTRL:
 DFB SCRSYM,LEFTSYM,RETSYM  
 DFB DELSYM,INSSYM,RGHTSYM
 DFB CTRLSYM,BEGSYM,ENDSYM
 DFB ESCSYM,EOLSYM
;
SYMCTRL:
 DFB NORMSYM,INVSYM,FLSHSYM  
 DFB BELLSYM,LEFTSYM,HOMESYM
 DFB CLSSYM,RETSYM,CLINSYM
 DFB RGHTSYM,SCUPSYM,SCDNSYM
 DFB UPSYM,DOWNSYM,EOLSYM
 DFB EOPSYM

; > : (  1 !)
ADRCTRL:
 DFB GTXGR,GBACK,GEXIT
 DFB GDEL,GINRP,GADV
 DFB GINSC,GBEG,GEND
 DFB GESC,GCUT
;
 DFB SETNORM,SETINV,SETFLSH
 DFB BELL,BS,HOME
 DFB CLS,NEWLINE,CLRLINE
 DFB ADVANCE,SCRLUP,SCRLDN
 DFB UP,DOWN,CLREOL
 DFB CLREOP


*--   
;   : A =  , Y =  .
;   : A = , Y =  ( HC)
;        .  
;
READSCRN::
 JSR VTABZ
 TYA
 JSR CALCHZ
 LDA (BASLIN),Y
 PHA
 INY
 LDA (BASLIN),Y
 TAY
 JSR VTAB
 PLA
 RTS


*--    
;   : A = N 
;   : BASLIN = , X,Y .
;
BASCALC::
 STA BASLIN+1
 LDA #0
 LSR BASLIN+1
 ROR A
 LSR BASLIN+1
 ROR A
 STA BASLIN
 LDA TXPAGE
 ADC BASLIN+1 C=0
 STA BASLIN+1
 RTS


 SBTL '  '

*--   
;   : X = 1/2 -
;   : A = Y - 256 .
PADDLE::
 LDA PDLTRIG
 LDY #0
PREAD LDA PDLREG-1,X
 BPL PRD
 INY
 BNE PREAD
 DEY
PRD TYA
 RTS


*--   
;   :  X = 1/2 -
;   : C = 0/1 -, A=?, Y .
;
BUTTON::
 ASL BTNREG-1,X
 RTS


 SBTL '-  '

SA   EQU $2A !
SX   EQU $2B
SPSW EQU $2C

MEMCALL1::
 JSR RGSAV
 TSX      /
 INX      / 
 LDA $100,X
 STA RDI+1
 CLC
 ADC #4
 STA $100,X
 INX
 LDA $100,X
 STA RDI+2
 ADC #0
 STA $100,X
 LDX #4
RDI LDA $FFFF+1,X
 DEX
 BEQ CS
 STA CMD-1,X
 BPL RDI /J
CS JSR SWITCH
 PHA
 JSR RGRST
CMD DS 3 <- 
 JSR RGSAV
 PLA
 JSR SWITCH

RGRST LDA SPSW .-
 PHA           S!
 LDX SX
 LDA SA
 PLP
 RTS

RGSAV STA SA .-
 STX SX        S!
 PHP
 PLA
 STA SPSW
 RTS
 
SWITCH::
  IF A7
 TAX
 BPL SWRAM
 JSR ROMSTAT
 JMP SETROM
  DS 5
SWRAM JSR RAMSTAT
 JMP SETRAM

  ELSE A9
 TAX
 BPL SWB1      N:1/2
 AND #$7F
 TAX
 LDA $C100,X
 ORA #$80
 JMP SETB2
SWB1 LDA $C100,X
 JMP SETRAM
  ENDIF


 SBTL '   '

INBUF  EQU $26 -27  
LFT    EQU $2E
WLFT   EQU $2F
MAX    EQU $30
CURY   EQU $31

*--      :
;      !
;   : Y = m. 
;       AX =   Y+1
;       C = 0/1: /. .
;  : Y = ., (INBUF),Y = RETSYM
;       GLNFLG =  
;
GETLNST1::
 STX INBUF
 STA INBUF+1
 DEY
 STY MAX
 JSR GMRK    
 LDA CH
 STA WLFT 
 LDA #0
 STA CT+1
 STA CURY
 STA LFT
 LDA #BEGSYM ..
 BCS GN
GNEXT JSR KEYIN
GN STA GLNFLG
 JSR GFILT
 JSR GOUT
 SEC
 ROR CT+1 /=0
 BMI GNEXT /J

;  :
GFILT TAY
 BPL GINS
 CMP #' '
 BCS GINS
;
 LDY #<GADV   .
 STY BAS2L+1
 LDY #GETCTRL-TABCTRL
 JMP CALLTAB

;  :
GINSC JSR KBDIN ^V
GINS TAX
CT LDY #0   0/ 0: 1- 
 BNE IR       
 JSR GMRK
IR LDA GDEL /JSR / .
 LDY CURY
GIC CPY MAX
 BCS GADV   - 
 TXA
 PHA
 LDA (INBUF),Y
 TAX
 PLA
 STA (INBUF),Y
 INY
 CMP #RETSYM
 BNE GIC

;    :
GADV LDY CURY
 LDA (INBUF),Y
 CMP #RETSYM
 BEQ RTS
 JSR RIGHT
 BCC INC
 INC LFT    
INC INC CURY
 RTS

;    :
GEND JSR GADV
 BNE GEND

;   :
GCUT LDY CURY
GMRK LDA #RETSYM
 STA (INBUF),Y
 RTS

;    :
GBACK LDY CURY
 BEQ RTS
 LDA WLFT
 JSR LEFT+2
 BCC DEC
 DEC LFT
DEC DEC CURY
RTS RTS

;    :
GBEG JSR GBACK
 BNE GBEG
 RTS

;   :
GDEL LDY CURY
 LDA (INBUF),Y
GDC CMP #RETSYM
 BEQ RTS
 INY
 LDA (INBUF),Y
 DEY
 STA (INBUF),Y
 INY
 BNE GDC /J

;   :
GEXIT JSR GCUT

;   :
GESC PLA
 PLA

;    :
GOUT LDA CH
 PHA
 LDA WLFT
 STA CH
 LDY LFT
GOC LDA (INBUF),Y
 CMP #RETSYM
 BEQ GCL
 STY YSAV1
 JSR STORSCR   , 
 LDY YSAV1
 INY
 JSR RIGHT ->C=0/1 / 
 BCC GOC
 BCS GEO /J
GCL JSR CLREOL
GEO PLA
 STA CH
 LDY CURY
 RTS

;   /:
GINRP LDA IR
 EOR #$20%$AD JSR/LDA
 STA IR
 RTS

GTXGR JMP GR.TEXT

 DS $800-*  
